﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using ERP_RORZE_DLL.Product.DAO;
using ERP_RORZE_DLL.Product.database;
using System.Text.RegularExpressions;

namespace ERP_RORZE_PRODUCT.Product.WTS
{
    public partial class frm_LaborWTSInput : DevExpress.XtraEditors.XtraForm
    {
        DataTable dt;
        ClsWTSDAO clsWTSDAO = new ClsWTSDAO();
        ClsLaborWTSTable b = new ClsLaborWTSTable();
        public event EventHandler Reload;

        int InputedOK;
        int InputedNG;
        int MOQty;
        int MachieNG;

        public frm_LaborWTSInput()
        {
            InitializeComponent();
            this.txtTime.LostFocus += txtTime_LostFocus;
        }

        void txtTime_LostFocus(object sender, EventArgs e)
        {
            if (cbStaff.Text == "")
            {
                MessageBox.Show("Chưa nhập Staff ID");
            }
            if (IsNumber(txtTime.Text) == false)
            {
                MessageBox.Show("Time phải là kiểu số");
            }
            else
            {
                int Inputed = 0;
                int Total = 0;
                int OverTime = 0;
                dt = clsWTSDAO.GetAllLaborWTSStaff(cbStaff.Text, dateDate.Value.Day, dateDate.Value.Month, dateDate.Value.Year);
                foreach (DataRow r in dt.Rows)
                {
                    Inputed = Inputed + int.Parse(r["SumofTime"].ToString());
                }
                Total = Inputed + int.Parse(txtTime.Text);
                dt = clsWTSDAO.GetAllLaborWTOverTimeStaff(cbStaff.Text, dateDate.Value.Day, dateDate.Value.Month, dateDate.Value.Year);
                foreach (DataRow r in dt.Rows)
                {
                    OverTime = int.Parse(r["Time"].ToString());
                }
                txtTotalTime.Text =""+ Total;
                txtInputedTime.Text =""+ Inputed;
                txtOvertime.Text =""+ OverTime;
            }
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void frm_LaborWTSInput_Load(object sender, EventArgs e)
        {
            //list machine
            DataTable dt1;
            dt1 = clsWTSDAO.GetAllLMachine();
            DataRow r = dt1.NewRow();
            r["MachineID"] = "";

            dt1.Rows.InsertAt(r, 0);
            cbMachine.DataSource = dt1;
            cbMachine.DisplayMember = "MachineID";
            cbMachine.ValueMember = "MachineID";

            //list MO Number
            DataTable dt2;
            dt2 = clsWTSDAO.GetAllLWTSMONo();
            DataRow r1 = dt2.NewRow();
            r1["MONo"] = "";
            r1["FullName"] = "";
            dt2.Rows.InsertAt(r1, 0);
            cbMONo.DataSource = dt2;
            cbMONo.DisplayMember = "FullName";
            cbMONo.ValueMember = "MONo";

            

            //list staff
            DataTable dt4;
            dt4 = clsWTSDAO.GetAllStaff();
            DataRow r3 = dt4.NewRow();
            r3["StaffID"] = "";
            r3["FullName"] = "";
            dt4.Rows.InsertAt(r3, 0);
            cbStaff.DataSource = dt4;
            cbStaff.DisplayMember = "FullName";
            cbStaff.ValueMember = "StaffID";

            
            //list work
            DataTable dt5;
            dt5 = clsWTSDAO.GetAllWorkLWTS();
            DataRow r4 = dt5.NewRow();
            r4["WorkID"] = "";

            dt5.Rows.InsertAt(r4, 0);
            cbWorkID.DataSource = dt5;
            cbWorkID.DisplayMember = "WorkID";
            cbWorkID.ValueMember = "WorkID";
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            //kiem tra so luong ok,ng da duoc nhap
            dt = clsWTSDAO.CheckInputVlaborOPT(cbMONo.SelectedValue.ToString(),cbOption.Text);
            InputedOK = 0;
            InputedNG = 0;
            foreach (DataRow r in dt.Rows)
            {
                InputedOK = InputedOK + int.Parse(r["LaborOPTOKQty"].ToString());
                InputedNG = InputedNG + int.Parse(r["LaborOPTNGQty"].ToString());
            }
            //kiem tra so luong MOQty
            dt = clsWTSDAO.CheckMOQty(cbMONo.SelectedValue.ToString());
            MOQty = 0;
            foreach(DataRow r in dt.Rows)
            {
                MOQty = MOQty + int.Parse(r["MOQty"].ToString());
            }
            //So luong san pham gia cong ngoai may
            dt = clsWTSDAO.ChekMachineNG(cbMONo.SelectedValue.ToString());
            MachieNG = 0;
            foreach (DataRow r in dt.Rows)
            {
                MachieNG = MachieNG + int.Parse(r["SumofNG"].ToString());
            }

            //kiem tra xem nguyen cong ngay co trong MOOption khong
            dt = clsWTSDAO.CheckMOOption(cbMONo.SelectedValue.ToString(), cbOption.Text);
            int i = 0;
            foreach (DataRow r in dt.Rows)
            {
                i++;
            }
            if (i == 0)
            {
                MessageBox.Show("Không có dữ liệu trong MOOPtion");
            }
            else if (IsNumber(txtOKQty.Text) == false)
            {
                MessageBox.Show("OKQty phải là kiểu số");
            }
                else if(IsNumber(txtNGQty.Text) == false)
            {
                MessageBox.Show("NGOK phải là kiểu số");
            }
            else if (IsNumber(txtTime.Text) == false)
            {
                MessageBox.Show("Time phải là kiểu số");
            }
            else if (IsNumber(txtClampTime.Text) == false)
            {
                MessageBox.Show("ClampTime phải là kiểu số");
            }
            else if (IsNumber(txtProTime.Text) == false)
            {
                MessageBox.Show("ProTime phải là kiểu số");
            }
            else
            {
                try
                {
                    if ((InputedOK + int.Parse(txtOKQty.Text)) > (MOQty - MachieNG))
                    {
                        MessageBox.Show("Số lượng sản phẩm OK ngoài machine chỉ có: " + (MOQty - MachieNG) + ", số lượng đã nhập trước đó: " + InputedOK + " số lượng trên form: " + int.Parse(txtOKQty.Text));
                    }
                    else if ((InputedNG + int.Parse(txtNGQty.Text)) > MachieNG)
                    {
                        MessageBox.Show("Số lượng sản phẩm NG ngoài machine có: "+MachieNG+", số lượng NG nhập trước đó là: "+InputedNG+", số lượng NG nhập trên form là: "+int.Parse(txtNGQty.Text));
                    }
                    else
                    {
                        if ((InputedNG + InputedOK + int.Parse(txtNGQty.Text) + int.Parse(txtOKQty.Text)) == MOQty)
                        {
                            ClsMOOptionTable c = new ClsMOOptionTable();
                            c.MONo = cbMONo.SelectedValue.ToString();
                            c.OptionID = cbOption.SelectedValue.ToString();
                            c.Finishdate = dateDate.Value;
                            c.Shift = cbShift.Text;
                            clsWTSDAO.UpdateFinishMOOption(c);
                            MessageBox.Show("Đã update vào MOOption thành công");
                        }
                        b.Clamptime = float.Parse(txtClampTime.Text);
                        b.Date = dateDate.Value;
                        b.MachineID = cbMachine.SelectedValue.ToString();
                        b.MONo = cbMONo.SelectedValue.ToString();
                        b.NGQty = int.Parse(txtNGQty.Text);
                        b.Note1 = txtNote1.Text;
                        b.Note2 = txtNote2.Text;
                        b.OKQty = int.Parse(txtOKQty.Text);
                        b.OptionID = cbOption.SelectedValue.ToString();
                        b.ProTime = float.Parse(txtProTime.Text);
                        b.Shift = cbShift.Text;
                        b.StaffID = cbStaff.SelectedValue.ToString();
                        b.Time = float.Parse(txtTime.Text);
                        b.WorkID = cbWorkID.SelectedValue.ToString();
                        clsWTSDAO.InsertLaborWTS(b);
                        MessageBox.Show("Đã nhập dữ liệu xong");
                        Reload(sender, e);
                        cbMONo.SelectedIndex = 0;
                        cbOption.SelectedIndex = 0;
                        cbWorkID.SelectedIndex = 0;
                        txtClampTime.Text = "";
                        txtInputedTime.Text = "";
                        txtNGQty.Text = "0";
                        txtNote1.Text = "";
                        txtNote2.Text = "";
                        txtOKQty.Text = "";
                        txtOvertime.Text = "";
                        txtProTime.Text = "";
                        txtTime.Text = "";
                        txtTotalTime.Text = "";
                        cbMONo.Focus();

                    }
                }
                catch
                {
                    MessageBox.Show("Time, ClampTime, NGQty, OKQty, ProTime phải là kiểu số");
                }
            }
            //MessageBox.Show(""+InputedOK  +","+ InputedNG +","+MOQty +","+MachieNG);
        }

        public bool IsNumber(string pText)
        {
            Regex regex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
            return regex.IsMatch(pText);
        }

        private void cbMONo_SelectedIndexChanged(object sender, EventArgs e)
        {
            //list  OptionID
            DataTable dt3;
            dt3 = clsWTSDAO.GetAllLOptionID(cbMONo.SelectedValue.ToString());
            DataRow r2 = dt3.NewRow();
            r2["OptionID"] = "";

            dt3.Rows.InsertAt(r2, 0);
            cbOption.DataSource = dt3;
            cbOption.DisplayMember = "OptionID";
            cbOption.ValueMember = "OptionID";
        }

        protected override bool ProcessKeyPreview(ref Message m)
        {
            if (m.Msg == 0x0100 && (int)m.WParam == 13)
            {
                this.ProcessTabKey(true);
            }
            return base.ProcessKeyPreview(ref m);
        }
    }
}